Skip to content

fix(integrations): render hyphenated /speckit-<name> for Droid (always-slash agent)#3688

Open
jawwad-ali wants to merge 2 commits into
github:mainfrom
jawwad-ali:fix/droid-always-slash-invocation
Open

fix(integrations): render hyphenated /speckit-<name> for Droid (always-slash agent)#3688
jawwad-ali wants to merge 2 commits into
github:mainfrom
jawwad-ali:fix/droid-always-slash-invocation

Conversation

@jawwad-ali

Copy link
Copy Markdown
Contributor

What

DroidIntegration is an always-skills agent — it installs commands as .factory/skills/speckit-<name>/SKILL.md and its build_command_invocation returns the hyphenated /speckit-<name>. But "droid" was missing from every set in _invocation_style.py (DOLLAR_SKILLS_AGENTS, ALWAYS_SLASH_AGENTS, CONDITIONAL_SLASH_AGENTS), so is_slash_skills_agent("droid", True) returned False.

As a result, both HookExecutor._render_hook_invocation and specify init's next-steps _display_cmd fell through to the dotted /speckit.<name> form — a command Droid never registers. Hook dispatch and the printed getting-started commands pointed at nonexistent commands for Droid users.

Fix

Add "droid" to ALWAYS_SLASH_AGENTS, matching its always-skills siblings grok/trae/zed/devin (each added to that set by its own integration PR — e.g. grok in #3535, zed in #2780; Droid's #3587 omitted it).

Tests

tests/integrations/test_integration_droid.py::TestDroidIntegration::test_is_slash_skills_agent — asserts is_slash_skills_agent("droid", True) is True (fails before the fix). Full droid suite (46 tests) passes; ruff clean.


AI-assisted: authored with Claude Code. I confirmed Droid is an always-skills SkillsIntegration (hyphenated build_command_invocation, no is_skills_mode override) and that grok/trae/zed/devin establish the ALWAYS_SLASH_AGENTS precedent.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Fixes Droid command rendering to use its registered /speckit-<name> format.

Changes:

  • Adds Droid to the always-slash agent set.
  • Adds regression coverage for Droid invocation detection.
Show a summary per file
File Description
src/specify_cli/_invocation_style.py Registers Droid’s invocation style.
tests/integrations/test_integration_droid.py Tests slash-skills detection.

Review details

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 2/2 changed files
  • Comments generated: 1
  • Review effort level: Medium

Comment thread tests/integrations/test_integration_droid.py

@mnriem mnriem left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please address Copilot feedback

@jawwad-ali

Copy link
Copy Markdown
Contributor Author

Thanks! The Copilot feedback is addressed — I added the disabled-case assertion so the test now covers both states:

assert is_slash_skills_agent("droid", True) is True
assert is_slash_skills_agent("droid", False) is True

The Copilot thread is resolved and the change is pushed. Ready for another look when you have a moment.

jawwad-ali and others added 2 commits July 24, 2026 13:28
…s-slash agent)

DroidIntegration is an always-skills agent: it installs commands as
.factory/skills/speckit-<name>/SKILL.md and its build_command_invocation
returns the hyphenated /speckit-<name>. But "droid" was missing from every
_invocation_style set, so is_slash_skills_agent("droid", True) returned False
and both HookExecutor._render_hook_invocation and `specify init` next-steps
fell through to the dotted /speckit.<name> form — a command Droid never
registers.

Add "droid" to ALWAYS_SLASH_AGENTS, matching its always-skills siblings
grok/trae/zed/devin (each added there by their own integration PR; droid's
github#3587 omitted it).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Address review: the test only covered ai_skills=True, which would also pass
if Droid were miscategorized as CONDITIONAL_SLASH. Add the ai_skills=False
assertion — True there is what distinguishes an ALWAYS_SLASH agent from a
conditional one.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jawwad-ali
jawwad-ali force-pushed the fix/droid-always-slash-invocation branch from 13878c6 to 3014244 Compare July 24, 2026 08:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants